package com.logic.landseaserver.persistence.read;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.logic.landseaserver.domain.BillDetail;
import com.logic.landseaserver.models.amortization.bean.AmortizationBillDetail;
import com.logic.landseaserver.ws.dto.BillDetailDTO;

public interface BillDetailReadMapper {

    BillDetail selectByPrimaryKey(Integer id);
    
    BillDetail selectByPrimaryKey1(Integer id);

    List<BillDetailDTO> selectAllByCurrent(HashMap map);

    /**
     * [简要描述]：根据合同编号查询租住有效期</br>
     * [详细描述]：合同签订半年，但房租只支付3个月，那么有效期就是3个月</br>
     * [作者]：Aaron(2017-07-04)</br>
     *
     * @param contractId 合同编号
     * @return
     */
    BillDetail selectLastEndDateByContractId(Integer contractId);

    List<BillDetailDTO> selectDetailListById(Integer id);

    List<BillDetail> getBillDetailFee(Integer billId);
    
    List<BillDetail> getBillDetail(Integer billId);

    List<BillDetail> queryLastBillType(HashMap hashMap);

    BillDetail getBillDetailByType(BillDetail billDetail);

    List<String> queryFeeTypeByContract(Integer contractId);
    /**
     *
     * [简要描述]：检查是否有房租</br>
     * [详细描述]：</br>
     * [作者]：Aaron(2017-09-07)</br>
     *
     * @param billId
     * @return
     *
     */
    BillDetail checkIsContainRent(Integer billId);

    BillDetail selectByBillIdAndType(Integer id, String type);

    BillDetail selectLastEndDateByContractId(Map<String, Object> paramMap);

    Integer getMaxCodeById(Integer billId);

    /**
     * 查询当前账单中的账单类型 不包含优惠减免
     * @param billId 账单编号
     * @return
     */
    List<String> queryTypeByBillId(Integer billId);
    
    /**
     * 
     * [简要描述]：摊销查询账单中的房租费和服务费</br>
     * [详细描述]：</br>
     * [作者]：Aaron(2017-11-10)</br>
     *
     * @param paramMap
     * @return
     *
     */
    List<AmortizationBillDetail> query4Amortization(Map<String,Object> paramMap);
    
    /**
     * 
     * [简要描述]：查询可更新的账单详情</br>
     * [详细描述]：</br>
     * [作者]：Aaron(2017-12-04)</br>
     *
     * @param billId
     * @return
     *
     */
    List<BillDetail> selectAutoPayUpdateList(Integer billId);
}